package org.skywork.gui.component.basic;

// *************************************************************************/
// Charada Soft
// Area de Desarrollo de Sistemas de Información
// *************************************************************************/
// Proyecto : SkyWork
// Archivo : GestionPersona.java
// Descripcion : Clase GestionPersona
// *************************************************************************/
// Version : 2.11.8
// Fecha de Creación: 01 de Enero de 2015
// Author : Daniel Andres Castillo Pedroza
// *************************************************************************/

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import org.skywork.bll.control.basic.GestionEntidadControl;
import org.skywork.entitys.basic.Arrendatario;
import org.skywork.entitys.basic.Persona;
import org.skywork.entitys.basic.Usuario;
import org.skywork.entitys.system.SkyWorkConstants;
import org.skywork.gui.component.SkyWorkPane;
import org.skywork.gui.component.basic.interfaces.ICancelar;
import org.skywork.gui.system.SystemGUI;
import org.swing.container.Panel;
import org.swing.controller.Button;
import org.swing.controller.ComboBox;
import org.swing.controller.Label;
import org.swing.controller.TextBox;
import org.swing.objects.BorderShadow;
import org.swing.transition.DeployHorizontal;
import org.swing.transition.ITransitionProcess;
import org.tools.Result;

public class GestionPersona extends SkyWorkPane implements ICancelar, ITransitionProcess {
    
    // Componentes del Panel GestionPersona
    
    private Label etiCedula, etiExpedicion, etiNombres;
    private Label etiApellido1, etiApellido2, etiDireccion;
    private Label etiBarrio, etiCelular, etiCorreo, etiTipo;
    private TextBox txtCedula, txtExpedicion, txtNombres;
    private TextBox txtApellido1, txtApellido2, txtDireccion;
    private TextBox txtBarrio, txtCelular, txtCorreo;
    private ComboBox <String> cmbTipo;
    private Button btnRegistrar;
    
    private BuscadorEntidades buscador;
    private Panel panel;
    private ProcessPane processPane;
    
    // Constructor del Panel GestionPersona
    
    public GestionPersona() {
        super(352,467); setName("Gestion de Persona en el Sistema");
        initComponents(); setTitle("Gestion de Persona en el Sistema");
        setBorder(new BorderShadow());
    }
    
    // Métodos sobreescritos del Panel GestionPersona
    
    @Override
    protected final void initComponents() {
        // Instanciando componentes del Panel
        panel = new Panel(1,1,350,465); 
        etiTipo = new Label("Tipo de Entidad",15,10,120,30);
        cmbTipo = new ComboBox(150,10,185,30);
        cmbTipo.addItem(SkyWorkConstants.ARRENDATARIO);
        cmbTipo.addItem(SkyWorkConstants.CODEUDOR);
        cmbTipo.addItem(SkyWorkConstants.ARRENDADOR);
        cmbTipo.addItem(SkyWorkConstants.REPRESENTANTE_LEGAL);
        cmbTipo.addItem(SkyWorkConstants.PROPIETARIO);
        etiCedula = new Label("Número de cédula",15,45,150,30);
        txtCedula = new TextBox(175,45,160,30);
        etiExpedicion = new Label("Lugar de expedición",15,80,150,30);
        txtExpedicion = new TextBox(175,80,160,30);
        etiNombres = new Label("Nombres",15,115,100,30);
        txtNombres = new TextBox(120,115,215,30);
        etiApellido1 = new Label("Primer apellido",15,150,150,30);
        txtApellido1 = new TextBox(175,150,160,30);
        etiApellido2 = new Label("Segundo apellido",15,185,150,30);
        txtApellido2 = new TextBox(175,185,160,30);
        etiDireccion = new Label("Dirección de residencia",15,220,150,25);
        txtDireccion = new TextBox(15,245,320,30);
        etiBarrio = new Label("Barrio de residencia",15,280,150,30);
        txtBarrio = new TextBox(175,280,160,30);
        etiCelular = new Label("Número de celular",15,315,150,30);
        txtCelular = new TextBox(175,315,160,30);
        etiCorreo = new Label("Dirección de correo electrónico",15,350,250,25);
        txtCorreo = new TextBox(15,375,320,30);
        btnRegistrar = new Button("Registrar persona",20,415,150,40);
        
        buscador = new BuscadorEntidades();
        processPane = new ProcessPane(); processPane.setCancelarProceso(this);
        processPane.insertComponent(buscador);
        processPane.setLocation(306,1); processPane.setVisible(false);
        
        // Configurando componentes del Panel
        etiTipo.setVisual(SystemGUI.getLabel()); 
        etiCedula.setVisual(SystemGUI.getLabel()); 
        etiExpedicion.setVisual(SystemGUI.getLabel());
        etiNombres.setVisual(SystemGUI.getLabel()); 
        etiApellido1.setVisual(SystemGUI.getLabel());
        etiApellido2.setVisual(SystemGUI.getLabel()); 
        etiDireccion.setVisual(SystemGUI.getLabel());
        etiBarrio.setVisual(SystemGUI.getLabel()); 
        etiCelular.setVisual(SystemGUI.getLabel());
        etiCorreo.setVisual(SystemGUI.getLabel()); 
        cmbTipo.setVisual(SystemGUI.getComponents(true));
        txtCedula.setVisual(SystemGUI.getTextBox());
        txtExpedicion.setVisual(SystemGUI.getTextBox()); 
        txtNombres.setVisual(SystemGUI.getTextBox());
        txtApellido1.setVisual(SystemGUI.getTextBox());
        txtApellido2.setVisual(SystemGUI.getTextBox());
        txtDireccion.setVisual(SystemGUI.getTextBox());
        txtBarrio.setVisual(SystemGUI.getTextBox());
        txtCelular.setVisual(SystemGUI.getTextBox()); 
        txtCorreo.setVisual(SystemGUI.getTextBox());
        btnRegistrar.setVisual(SystemGUI.getComponents(true));
        
        // Eventos de los componentes del Panel
        btnRegistrar.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                //registrarPersona();
                panel.setVisible(false); processPane.setVisible(true);
                DeployHorizontal.executeTransition(processPane,2,50,DeployHorizontal.LEFT);
            }
        });
        
        // Insertando componenetes al Panel
        panel.add(txtExpedicion); panel.add(etiNombres); panel.add(txtNombres);  
        panel.add(etiTipo); panel.add(cmbTipo); panel.add(btnRegistrar);
        panel.add(etiCedula); panel.add(txtCedula); panel.add(etiExpedicion); 
        panel.add(etiApellido1); panel.add(txtApellido1); panel.add(etiApellido2); 
        panel.add(txtApellido2);  panel.add(etiDireccion); panel.add(txtDireccion); 
        panel.add(etiCorreo); panel.add(txtCorreo); add(processPane); add(panel);
        panel.add(etiBarrio); panel.add(txtBarrio); panel.add(etiCelular); panel.add(txtCelular); 
    }    

    @Override
    protected void cleanPane() {
        txtCedula.clean(); txtExpedicion.clean(); txtNombres.clean();
        txtApellido1.clean(); txtApellido2.clean(); txtDireccion.clean();
        txtBarrio.clean(); txtCelular.clean(); txtCorreo.clean();
    }
    
    // Métodos del Panel GestionPersona
    
    private void registrarPersona() {
        Result result = null; // Objeto que contendra la respuesta
        
        // Mapeando los datos de la entidad a registrar
        Persona persona = new Persona(txtCedula.getText());
        persona.setExpedicion(txtExpedicion.getText());
        persona.setNombres(txtNombres.getText());
        persona.setPrimerApellido(txtApellido1.getText());
        persona.setSegundoApellido(txtApellido2.getText());
        persona.setDireccion(txtDireccion.getText());
        persona.setBarrio(txtBarrio.getText());
        persona.setCelular(txtCelular.getText());
        persona.setCorreo(txtCorreo.getText());
        persona.setUsuario(new Usuario("KOLD0410"));
        
        switch ((String) cmbTipo.getSelectedItem()) {
            // Registrando Arrendatario
            case (SkyWorkConstants.ARRENDATARIO) :
                Arrendatario arrendatario = new Arrendatario(persona);
                result = GestionEntidadControl.registrarArrendatario(arrendatario);
            break;
        }
        
        // Mostrando el mensaje y limpiando componentes del panel
        SystemGUI.showMessage(result); if (result.isSuccess()) {cleanPane();} 
    }

    @Override
    public void executeProcess() {
        DeployHorizontal.executeTransition(processPane,1,50,DeployHorizontal.RIGTH,this);
    }

    @Override
    public void process() {
        panel.setVisible(true); processPane.setVisible(false);
    }
}